干货 | 携程无线APM平台,如何实现全球端到端性能监控
陈浩然,携程无线技术高级总监,负责无线委员会和无线基础工程团队。
刘李丰,携程无线基础服务和平台总监。
作为2017年携程无线技术平台化的另一重点项目,全新APM平台改变了原有性能监控平台的设计思路,转为从全球化维度进行性能监控,以满足公司在新业务场景下的端到端性能监控需求。
携程无线APM历史
提到携程原有的无线APM平台,不得不提UBT平台。UBT (User Behaviour Tracking) 平台最初的目的是用于收集用户行为,其网络通道是自建的通道服务,和业务服务通道相隔离。刚开始一些性能相关的数据也通过UBT通道上传至后端处理,后期为了提高性能数据采集的实时性,把性能数据和普通用户行为数据进行区隔,所有性能数据都会实时上传至后端。
最初的性能监控是围绕网络性能展开,以服务为主维度进行监控(图1),这是以当时对业务服务进行集中优化为背景的。
图1 早期实时网络性能监控
为了方便Dev开发人员跟踪某个服务的性能数据,又按照版本和服务维度按照小时级聚合网络性能数据(端到端成功率、平均耗时和耗时分布,见图2),这样每个版本服务的性能优化效果很清晰:
图2 小时级数据聚合
其他的监控数据还包括网络服务请求和响应数据大小、服务错误类型分布以及服务耗时细分(图3-5),也是为具体服务的性能优化提供数据依据:
图3-5 多种维度数据聚合
后期我们又增加了定位、启动、页面加载等各类性能指标的监控,对当时的性能优化和日常运维提供了充分依据。
新APM平台
2017年下半年公司的国际化业务开始加速,原有的监控维度已不能满足技术场景的需要,我们调整了设计思路并参考了商业APM的设计,最终决定自研开发满足携程全球化业务场景的新APM平台。
我们将携程App核心性能指标集中为8类:网络性能、崩溃、启动加载、定位、图片、CRN、IM和VoIP(图6),基础维度包括系统平台和App版本。
图6 新APM平台
网络性能是重中之重,所以需要从不同维度进行监控:
1. 基础网络性能
对端到端网络服务成功率,平均耗时和访问量进行监控(图7),并且提供全球热门国家和热门城市细分维度。
图7 基础网络性能
2. 网络性能组合分析
提供不同维度下的网络性能组合分析,可以从国家、城市、运营商、接入方式这几个方面实现组合监控,方便发现多种组合条件下的问题(图8)。
图8 网络性能组合分析
3. 网络入口性能
提供携程不同网络入口的性能聚合监控,为全球网络入口的优化提供依据(图9)。
图9 网络入口性能
4. 全球网络诊断(拨测功能)
通过App端实现对目标站点的性能拨测和诊断,包括DNS解析、TCP连接、SSL握手、Traceroute、Ping类型数据都可以采集,由于涉及特殊功能,暂不公开更多细节。
App崩溃监控在业界已经非常成熟,难度在于崩溃数据的采集和分析能力(图10)。
图10 App崩溃采集
对App的冷启动时长、Android安装后首次启动时长和Android Bundle启动加载时长进行监控。
对App的经纬度定位和城市定位的成功率、平均耗时和请求量进行监控。
对App的图片下载成功率、平均耗时和下载量进行监控,和网络性能类似提供了全球热门国家和城市的细分维度。
对使用携程CRN框架开发的RN模块加载数量和平均耗时进行监控,为CRN优化提供依据。
这两项都属于业务型技术指标的监控,例如对各类IM消息和VoIP通话的成功率、平均耗时和请求量进行监控,也提供全球热门国家和城市的细分维度。
从设计思路上可以看出新APM平台把重心放在全球化维度和App核心体验性能两方面,上线后已经通过APM发现一些热点地区的性能问题,未来我们会逐步分享相关优化实践。
APM技术细节
目前新APM平台已实现100+种的Metric监控,日处理数据量约100+亿,日写入ES(Elastic Search)数据量100+G。其处理流程如下图所示:
图11 APM处理流程
App客户端数据采集
Storm流式计算,对数据进行滤噪和聚合
计算数据写入,以及进一步的归集
ES数据存储
看板展示各种维度的组合数据
更多技术细节:
APM主要基于时序数据的存储和查询。我们没有采取目前比较流行的InfluxDB, 尽管在写入速度、数据存储以及查询响应上,都要优于ES。我们采取ES,主要是从携程ES平台运维成熟度、查询复杂度和系统数据量三个方面来综合考虑,ES方案比较适合当前的技术场景。
维度组合多,单单网络服务请求就可以划分为客户端版本、平台、网络类型、国家、城市等,按照10个版本,2个平台,4种网络类型,200个国家,1000个城市来计算维度,M = 10 x 2 x 4 x 200 x 1000 = 16,000,000, 按照每分钟一个Data Point,写入量就达到约30W/秒,这个数据写入量量对系统压力是非常大的。
针对这个问题,我们采取2种方式进行数据处理:
降维:不是每一种监控都需要这样的模型,有的我仅仅是看国家,不关注客户端版本,那我们就可以把客户端版本这个维度去掉。
部分采样:比方说城市维度,全球有上万城市,对于监控来说,按照80/20原则,我们采集20%热门城市进行监控。
噪音数据会对监控造成比较大影响,比如HTTP请求时间,遇到奇点数据值会达到30秒以上(因客户端超时设置等影响),这类数据在进入ES前,先进行滤噪。对于各种需要滤噪的数据进行配置,在Storm Extract数据时进行数据处理。
结束语
技术平台自身需要生命力,相信APM平台也会随着业务重心的发展发生变化,希望我们的APM方案能够对大家有借鉴价值,也欢迎大家和我们交流自己的APM设计思路和技术方案。
【推荐阅读】
携程技术中心3月热招职位
戳下方图片直达↓↓↓
我们在凌空SOHO,等你来哦~